package juego;

import java.util.ArrayList;
import java.util.Iterator;

import vista.VistaTorpedoRastreador;

import ar.uba.fi.algo3.titiritero.Dibujable;

public class TorpedoRastreador extends Torpedo{
	
	//constructor
	public TorpedoRastreador(Coordenada ubicacion){
		super(ubicacion);
	};
	
	//metodos
	@Override
	public int vivir(ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines){
		int puntaje = 0;
		Movil enemigo = null;
		Iterator<Movil> iterador = listaDeMoviles.iterator();
		//busco el primer enemigo de la lista
		while ((enemigo == null) && (iterador.hasNext())) {
			Movil movil = iterador.next();
			boolean lealtadDeMovil = movil.verLealtad();
			if (this.verLealtad() != lealtadDeMovil) {
				//que la lealtad se distinta me asegura que no esta comparando consigo
				//mismo
				boolean esProyectil = movil.esProyectil();
				if (!esProyectil) {
					enemigo = movil;
				}
			}
		}
		
		//si no hay enemigos se mueve en vertical
		if (enemigo == null) {
			int movimiento = this.velocidad();
			if (this.esLeal)
			   movimiento = movimiento*(-1);
			ubicacion.moverEnXY(0,movimiento);
			
		}
		
		//si hay al menos un enemigo, busco al mas cercano
		else {
			int distancia = ubicacion.distancia(enemigo.verUbicacion());
			Iterator<Movil> iterador2 = listaDeMoviles.iterator();
			while (iterador2.hasNext()){
				Movil movil = iterador2.next();
				if (this.esLeal != movil.verLealtad()){
					if (!movil.esProyectil()){
						Coordenada ubicacionDelMovil = movil.verUbicacion();
						if (distancia < (ubicacion.distancia(ubicacionDelMovil))){
				               enemigo = movil;
				               distancia = ubicacion.distancia(ubicacionDelMovil);
                		}
					}
				}
			}
			
			Coordenada ubicacionDeEnemigo = enemigo.verUbicacion();
			int enX = ubicacionDeEnemigo.obtenerCoordenadaX() - ubicacion.obtenerCoordenadaX();
			int enY = ubicacionDeEnemigo.obtenerCoordenadaY() - ubicacion.obtenerCoordenadaY();
			Coordenada movimiento2 = new Coordenada(enX,enY);
			movimiento2.normalizarCoordenada();
			int velocidadMovimiento;
			if (this.velocidad() <= distancia){
				velocidadMovimiento = this.velocidad();
			}
			else {
				velocidadMovimiento = distancia;
				
			}
			enX = ((movimiento2.obtenerCoordenadaX())*velocidadMovimiento);
			enY = ((movimiento2.obtenerCoordenadaY())*velocidadMovimiento);
			movimiento2.cambiarCoordenadaX(enX);
			movimiento2.cambiarCoordenadaY(enY);
			enX = movimiento2.obtenerCoordenadaX();
			enY = movimiento2.obtenerCoordenadaY();
			ubicacion.moverEnXY(enX,enY);
		}
		
		//impacto
		puntaje = this.impactar(listaDeMoviles,listaDeBotines);
		return puntaje;
	}
	
	@Override
	public Dibujable getDibujable() {
		Dibujable dibujable = new VistaTorpedoRastreador();
		dibujable.setPosicionable(this);
		return dibujable;
	};

};
